The proliferation of computers and computing systems has resulted in a continually growing need for efficient and reliable storage of data. Host computing devices make use of data storage devices of many types and complexities to satisfy the growing data storage needs. The types of data storage devices commonly used range from individual flash memory devices and hard drives to storage servers and clusters of storage servers. A storage server is a specialized computer that provides storage services related to the organization and storage of data, to one or more clients. The data is typically stored on writable persistent storage media, such as non-volatile memories and disks. A storage server is configured to operate according to a client/server model of information delivery and may enable many clients or applications to access the data served by the system. A storage server can employ a storage architecture that serves the data with both random and streaming access patterns at either a file level, as in network attached storage (NAS) environments, or at the block level, as in a storage area network (SAN).
A traditional method for a host to make a copy of a selected data set is for the host to read the data set from the source storage device into the memory of the host and then transfer the data set to the destination storage location, under the control of the host. This may be accomplished by the host performing a series of buffered read/write processes on smaller chunks of the data set that is being copied. In addition, data sets are sometimes copied from one location in a storage device or system to another location within that same storage device or system. The host controlled or host-centric copy process described above, in which the copied data flows through the host, is typically used even in cases where the source and the destination for the copy operation are within the same storage device or system.
While the host-centric copy process described above may be acceptable if the host has available bandwidth and/or the quantity of data is relatively small, the burdens associated with copying data in this manner can become significant in some cases. In addition to consuming central processing unit (CPU) resources of the host, if the data is transferred over a network, network bandwidth is also unnecessarily consumed because the data is first transferred to the host and then from the host to the destination. Processes called “copy offload” processes allow these types of data transfers to occur in a more efficient manner by transferring data directly between storage devices or systems, for example from one disk drive to another.
In the copy offload processes described above, a token is created and later returned to the storage device or system to initiate copying of the data from one location to another. Between the time the token is created and returned to the storage device, the token may also be transferred or exchanged among various hosts. Once a host returns the token to the destination storage device, the copy process occurs through communication between the source and the destination storage locations without the data having to flow through any of the hosts and without the hosts managing the data transfer process.
In addition to reducing the use of host computing resources, and potentially network bandwidth, the use of a token allows the copy or data transfer process to be separated from other operations of the host. Once the host interacts with the source storage device to create the token, the actual copying or transfer of the data can occur at a later point in time. In some cases the token may be transferred to a second host device. The copy process is started when the second host provides the token to the storage device or system. However, current implementations only allow copy offload processes involving more than one host to occur when both hosts are using the same interface protocol to communicate with the storage device(s) or system(s). Similarly, current copy offload implementations involving more than one storage device or system are only supported when the storage devices or systems utilize the same interface protocol. For example, when a token is created for a host that communicates with a storage system using a SCSI interface, that token can only be used by other SCSI hosts and can only be used for copying the associated data to other SCSI storage devices or systems.